package edu.utn.tacs.grupouno.rest.implementations;

import java.util.List;
import java.util.UUID;

import javax.ws.rs.Path;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import edu.utn.tacs.grupouno.dao.AnalisisTipoDAO;
import edu.utn.tacs.grupouno.negocio.AnalisisTipo;
import edu.utn.tacs.grupouno.negocio.Estudio;
import edu.utn.tacs.grupouno.rest.api.AnalisisTipoService;

@Service("analisisTipoService")
@Path("/analisis-tipo")
public class AnalisisTipoServiceImpl implements AnalisisTipoService {
	
	private AnalisisTipoDAO dao;

	@Override
	public AnalisisTipo getAnalisisTipo(String id) {
		return dao.getAnalisisTipo(id);
	}

	@Override
	public void putAnalisisTipo(String id, AnalisisTipo analisisTipo) {
		analisisTipo.setId(UUID.fromString(id));
		dao.saveAnalisisTipo(analisisTipo);
	}

	@Override
	public void postAnalisisTipo(AnalisisTipo analisisTipo) {
		dao.saveAnalisisTipo(analisisTipo);
	}

	@Override
	public void deleteAnalisisTipo(String id) {
		dao.removeAnalisisTipo(id);
	}

	@Override
	public List<Estudio> getEstudios(String id) {
		return dao.getAnalisisTipo(id).getAnalisis().getEstudios();
	}

	@Override
	public void putEstudios(String id, List<Estudio> estudios) {
		AnalisisTipo analisisTipo = dao.getAnalisisTipo(id);
		analisisTipo.getAnalisis().setEstudios(estudios);
		dao.saveAnalisisTipo(analisisTipo);
	}

	@Override
	public void postEstudio(String id, Estudio estudio) {
		AnalisisTipo analisisTipo = dao.getAnalisisTipo(id);
		analisisTipo.getAnalisis().addEstudio(estudio);
		dao.saveAnalisisTipo(analisisTipo);
	}

	@Override
	public void deleteEstudios(String id) {
		AnalisisTipo analisisTipo = dao.getAnalisisTipo(id);
		analisisTipo.getAnalisis().deleteEstudios();
		dao.saveAnalisisTipo(analisisTipo);
	}

	@Override
	public void deleteEstudio(String idAnalisisTipo, String idEstudio) {
		AnalisisTipo analisisTipo = dao.getAnalisisTipo(idAnalisisTipo);
		UUID uuidEstudio = UUID.fromString(idEstudio);
		analisisTipo.getAnalisis().deleteEstudio(uuidEstudio);
		dao.saveAnalisisTipo(analisisTipo);
	}

	@Autowired
	public void setAnalisisTipoDAO(AnalisisTipoDAO dao) {
		this.dao = dao;
	}

}
